//==========================================================================
// Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
//==========================================================================

#ifndef __ELASTOS_HAL_ROUND_H__
#define __ELASTOS_HAL_ROUND_H__

#ifdef __cplusplus

INLINE uint_t RoundUp2Order(uint_t u)
{
    uint_t uResult;

    ASM("bsr    %%edx, %%ecx;"
        "jnz    1f;"
        "xor    %%eax, %%eax;"
        "jmp    2f;"
        "1:"
        "mov    $1, %%eax;"
        "shl    %%cl, %%eax;"
        "cmp    %%eax, %%edx;"
        "je     2f;"
        "shl    $1, %%eax;"
        "2:"
        :"=a"(uResult) :"d"(u) :"ecx");

    return uResult;
}

#endif // __cplusplus

#endif //__ELASTOS_HAL_ROUND_H__
